package gameEngine.agents;

import java.util.ArrayList;
import gameEngine.agents.observationSystem.samples.Sample;

/**
 * basic interface for an agent
 * @author alon & vladimir
 *
 */
public interface Agent {
	/**
	 * return a score
	 */
	public double play();
	/**
	 * return chosen next player id 
	 */
	public int chooseNextPlayer();
	/**
	 * return agent id
	 * @return
	 */
	public int getID();
	
	/**
	 * 
	 * @return agents competence
	 */
	public double getCompetence();
	
	/**
	 * setter
	 * @param competence
	 */
	public void setCompetence(double competence);
	
	/**
	 * 
	 * @return agents Epsilon Greedy
	 */
	public double getEpsilonGreedy();
	
	/**
	 * setter
	 * @param epsilon
	 */
	public void setEpsilonGreedy(double epsilon);
	
	/**
	 * analyze the last turn action
	 */
	public void analyzeSample(Sample s);
	
	/**
	 * 
	 * @return clone of the agent
	 */
	public Agent clone();
	
	/**
	 * used to init the clone new team mate model
	 * @param agents
	 */
	public void initClonesModel(ArrayList<Agent> agents);

}
